package com.example.springDemo.config;

import com.example.springDemo.interceptor.RedisUrlInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * ● @EnableWebMvc + WebMvcConfigurer —— @Bean  可以全面接管SpringMVC，所有规则全部自己重新配置； 实现定制和扩展功能
 *   ○ 原理
 *   ○ 1、WebMvcAutoConfiguration  默认的SpringMVC的自动配置功能类。静态资源、欢迎页.....
 *   ○ 2、一旦使用 @EnableWebMvc 、。会 @Import(DelegatingWebMvcConfiguration.class)
 *   ○ 3、DelegatingWebMvcConfiguration 的 作用，只保证SpringMVC最基本的使用
 *     ■ 把所有系统中的 WebMvcConfigurer 拿过来。所有功能的定制都是这些 WebMvcConfigurer  合起来一起生效
 *     ■ 自动配置了一些非常底层的组件。RequestMappingHandlerMapping、这些组件依赖的组件都是从容器中获取
 *     ■ public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport
 *   ○ 4、WebMvcAutoConfiguration 里面的配置要能生效 必须  @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
 *   ○ 5、@EnableWebMvc  导致了 WebMvcAutoConfiguration  没有生效。 相当于全面接管spring的底层
 */

//@EnableWebMvc // :全面接管spring的底层
//    静态资源 视图解析器  欢迎页等待  全部失效  要自己配置
public class CustomizerTest implements WebMvcConfigurer, WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

    /**
     * XxxXxxCustomizer"定制化"器
     */
    @Override
    public void customize(ConfigurableServletWebServerFactory server) {
        server.setPort(8080);
    }

    @Override//第一静态资源行为
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        访问 /aa/**  所有请求都去 classpath:/static/下匹配
        registry.addResourceHandler("/aa/**")
                .addResourceLocations("classpath:/static/");
    }

}
